package com.cy1;

import java.util.Arrays;
import java.util.Scanner;

/**
 * 7.28 练习代码
 *
 * @author xxx
 * @date 2022/07/28 10:04
 **/
public class J728 {
    public static void main(String[] args) {
        // int sum = 0;
        //// for (int i = 1; i <= 100; i += 2) {
        //// sum += i;
        //// }
        //// int sum1 = 0;
        //// for (int i = 2; i <= 100; i += 2) {
        //// sum1 += i;
        //// }
        //// System.out.println("1-100奇数和：" + sum);
        //// System.out.println("1-100偶数和：" + sum1);
        // 求阶乘和

        Scanner scanner = new Scanner(System.in);
        // int input = scanner.nextInt();
        // 保存阶乘和
        // int sum = 0;
        // //保存阶乘
        // int ret = 1;
        // for (int i = 1; i <= input; i++) {
        // sum += ret *= i;
        // }
        // System.out.println("sum:" + sum);
        // 版本2
        //
        // for (int i = 1; i <= 100; i++) {
        // if (0 != i % 3) {
        // continue;
        // }
        // if (0 != i % 5) {
        // continue;
        // }
        // if ((0 == i % 3) && (0 == i % 5)) {
        // System.out.println(i);
        // }
        // }
        // scanner.close();
        // 猜数字游戏
        // Random random = new Random();
        // int i1 = random.nextInt(100);
        // while (true) {
        // System.out.println("请输入猜测的数字：");
        // int i = scanner.nextInt();
        // if (i < i1) {
        // System.out.println("小了1");
        // } else if (i > i1) {
        // System.out.println("大了！");
        // } else {
        // System.out.println("猜对了！");
        // break;
        // }
        // }
        // 二进制中1的个数测试代码
        // int i = scanner.nextInt();
        // System.out.println(i+"的二进制为："+Integer.toBinaryString(i));
        // System.out.println(i+"的二进制格式为："+numberOfBinaryOne(i));
        // 计算分数的值
        // int flag = 1;
        // double sum = 0;
        // for (int i = 1; i <= 100; i++) {
        // sum += (flag * (1.0 / i));
        // flag = -flag;
        // }
        // System.out.println("1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值为："+sum);
        // 水仙花数
        // for (int i = 100; i <= 999; i++) {
        // int sum = 0;
        // int j = i;
        // while (j != 0) {
        // sum += Math.pow(j % 10, 3);
        // j /= 10;
        // }
        // if (sum == i) {
        // System.out.println(i);
        // }
        // }
        // 打印x图案
        // while (scanner.hasNext()) {
        // int line = scanner.nextInt();
        // int left = 0;
        // int right = line - 1;
        // for (int i = 0; i < line; i++) {
        // for (int j = 0; j < line; j++) {
        // if (j == left || j == right) {
        // System.out.print("*");
        // } else {
        // System.out.print(" ");
        // }
        // }
        // System.out.println();
        // if (i < (line / 2)) {
        // if (right - left == 1) {
        // ;
        // } else {
        // left++;
        // right--;
        // }
        //
        // } else {
        // left--;
        // right++;
        // }
        // }
        // }

        // 乘法口诀表
        // for (int i = 1; i <= 9; i++) {
        // for (int j = 1; j <= i; j++) {
        // System.out.print(j + "*" + i + "=" + j * i);
        // System.out.print(" ");
        // }
        // System.out.println();
        //
        // }
        // 整数的每一位
        // int i = scanner.nextInt();
        // System.out.println(i + "的每一位是：");
        // while (i != 0) {
        // System.out.print(i % 10);
        // System.out.print(" ");
        // i /= 10;
        // }
        // 模拟密码登录
        // String s = "chenyong dashuaibi";
        // byte times = 3;
        // while (times-- > 0) {
        // System.out.println("请输入密码：");
        // String s1 = scanner.nextLine();
        // if (Objects.equals(s1, s)) {
        // System.out.println("登陆成功！");
        // break;
        // } else {
        // System.out.println("登录失败，你还有" + times + "次机会！");
        // }
        // }
        // 二进制序列
        // int i = scanner.nextInt();
        // int position = 1;
        // // 获取奇数位
        // System.out.println(i + "的二进制序列位：" + Integer.toBinaryString(i));
        // position <<= 30;
        // System.out.println(i + "的奇数位二进制序列：");
        // for (int j = 1; j <= 16; j++) {
        // if ((position & i) != 0) {
        // System.out.print(1);
        // } else {
        // System.out.print(0);
        // }
        // position >>= 2;
        // }
        // System.out.println();
        // position = 1;
        // position <<= 31;
        // System.out.println(i + "的偶数位二进制序列：");
        // for (int j = 1; j <= 16; j++) {
        // if ((position & i) != 0) {
        // System.out.print(1);
        // } else {
        // System.out.print(0);
        // }
        // position >>= 2;
        // }
        // 找到两个数组中相同的元素
        int[] a = {1, 2, 2, 1};
        int[] b = {1, 2};
        for (int i : intersection(a, b)) {
            System.out.println(i);
        }
    }

    public static int[] intersection(int[] nums1, int[] nums2) {
        int[] ret = new int[50];
        Arrays.fill(ret, 0);
        Arrays.sort(nums2);
        Arrays.sort(nums1);
        int k = 0;
        flag:
        for (int i = 0; i < nums1.length; i++) {
            int position = Arrays.binarySearch(nums2, nums1[i]);
            if (position >= 0 && position < nums2.length) {
                if (k == 0) {
                    ret[k++] = nums1[i];
                } else {
                    for (int j = 0; j < k; j++) {
                        if (ret[j] == nums1[i]) {
                            continue flag;
                        }
                    }
                    ret[k++] = nums1[i];
                }
            }
        }
        int[] ints = Arrays.copyOf(ret, k);
        return ints;
    }

    private static int numberOfBinaryOne(int i) {
        int position = 1;
        int count = 0;
        for (int j = 0; j < 32; j++) {
            if ((i & position) != 0) {
                count++;
            }
            position <<= 1;
        }
        return count;
    }

}